package 简单.字符串;

import java.util.Arrays;

/**
 * 给你一个字符串 text，你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"（气球）。
 * <p>
 * 字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/maximum-number-of-balloons
 */
public class 气球的最大数量_1189 {

    public static void main(String[] args) {

    }

    /**
     * 记录balloon每个字符出现的次数
     *
     * @param text
     * @return
     */
    public int maxNumberOfBalloons(String text) {
        int a = 0, b = 0, l = 0, o = 0, n = 0;
        for (int i = 0; i < text.length(); i++) {
            char cur = text.charAt(i);  //使用临时变量存储，以免重复尝试取值
            if (cur == 'a') {
                a++;
            } else if (cur == 'b') {
                b++;
            } else if (cur == 'l') {
                l++;
            } else if (cur == 'o') {
                o++;
            } else if (cur == 'n') {
                n++;
            }
        }
        return Math.min(o / 2, Math.min(l / 2, Math.min(n, Math.min(a, b))));
    }

    /**
     * 使用数组存储
     *
     * @param text
     * @return
     */
    public int maxNumberOfBalloons2(String text) {
        int[] total = new int[5];
        for (int i = 0; i < text.length(); i++) {
            char cur = text.charAt(i);
            if (cur == 'a') {
                total[0]++;
            } else if (cur == 'b') {
                total[1]++;
            } else if (cur == 'l') {
                total[2]++;
            } else if (cur == 'o') {
                total[3]++;
            } else if (cur == 'n') {
                total[4]++;
            }
        }
        total[2] /= 2;  //一个气球需要两个字符l
        total[3] /= 2;
        return Arrays.stream(total).min().getAsInt();
    }

}
